package com.neuedu.corejava.ch8;

public class TryClass {

	public static void main(String[] args) {
		int a = 1, b = 0;
		// 异常处理方法
		// 1、try catch
		try {
			int c = a / b;
		} catch (Exception e) {
			// throw e;
		}

		// 2、try finally
//		try {
//			int c = a / b;
//		} finally {
//			System.out.println("一定会执行");
//		}

		// 3、try catch finally
		try {
			int c = a / b;
		} catch (Exception e) {
			// 发生异常需要执行的代码
		} finally {
			System.out.println("一定会执行");
		}

		// 4、try catch catch finally
		try {
			int c = a / b;
			int[] arr = new int[3];
			arr[3] = 5;
		} catch (ArithmeticException e) {
			// 发生异常需要执行的代码
			//e.printStackTrace();
		} catch (ArrayIndexOutOfBoundsException e) {// 使用多个catch时需要注意异常类的父子关系，父类异常需要写在后面
			e.printStackTrace();
		} finally {
			System.out.println("一定会执行");
		}

		//5、try catch finally --->jdk1.7以上
		try {
			int c = a / b;
			int[] arr = new int[3];
			arr[3] = 5;
		} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {//使用一个try处理多个异常时，不能有父子关系
			// 发生异常需要执行的代码
			//e.printStackTrace();
			System.exit(0);//直接退出程序，不执行finally
		} finally {
			System.out.println("一定会执行");
		}
		
		//6、try catch嵌套
		
		//7、
		try {
			System.out.println("执行try");
			return;
		} catch (Exception e) {
			System.out.println("执行catch");
		}finally{
			//在try catch中，如果有return，还是会执行finally
			System.out.println("执行finally");
		}
		System.out.println("main方法执行完毕");
	}
}
